package 简单.字符串;

/**
 * 我们定义，在以下情况时，单词的大写用法是正确的：
 * <p>
 * 全部字母都是大写，比如 "USA" 。
 * 单词中所有字母都不是大写，比如 "leetcode" 。
 * 如果单词不只含有一个字母，只有首字母大写， 比如 "Google" 。
 * 给你一个字符串 word 。如果大写用法正确，返回 true ；否则，返回 false 。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/detect-capital
 */
public class 检测大写字母_520 {

    public static void main(String[] args) {

    }

    /**
     * 如果第一个字母是大写，那么以后的字母必须全是小写或者全是大写
     * 如果第一个字母是小写，那么以后的字母必须全是小写
     *
     * @param word
     * @return
     */
    public boolean detectCapitalUse(String word) {
        //第一个字母大写
        if (word.charAt(0) >= 65 && word.charAt(0) <= 90) {
            for (int i = 1; i < word.length(); i++) {
                boolean isBig = false;
                if (word.charAt(1) >= 65 && word.charAt(1) <= 90) {
                    isBig = true;
                }
                if (isBig) {
                    if (word.charAt(i) >= 97 && word.charAt(i) <= 122) {
                        return false;
                    }
                } else {
                    if (word.charAt(i) >= 65 && word.charAt(i) <= 90) {
                        return false;
                    }
                }
            }
        } else {
            for (int i = 1; i < word.length(); i++) {
                if (word.charAt(i) >= 65 && word.charAt(i) <= 90) {
                    return false;
                }
            }
        }
        return true;
    }

    public boolean detectCapitalUse2(String word) {
        if (word.length() >= 2 &&
                Character.isLowerCase(word.charAt(0)) &&
                Character.isUpperCase(word.charAt(1))) {
            return false;
        }
        for (int i = 2; i < word.length(); i++) {
            if (Character.isLowerCase(word.charAt(i)) &&
                    Character.isUpperCase(word.charAt(i - 1)) ||
                    Character.isUpperCase(word.charAt(i)) &&
                            Character.isLowerCase(word.charAt(i - 1))
            ) {
                return false;
            }
        }

        return true;
    }
}
